import { http } from '@/utils/request'

// 用户登录状态管理

// 检查用户是否已登录
export const isLoggedIn = () => {
  // 从本地存储中获取用户信息
  const userInfo = uni.getStorageSync('userInfo');
  const token = uni.getStorageSync('token');

  // 如果有token或用户信息，则认为用户已登录
  return !!token || !!userInfo;
};

// 保存用户登录状态
export const setLoggedIn = (userInfo, token) => {
  // 保存用户信息和token到本地存储
  uni.setStorageSync('userInfo', userInfo);
  uni.setStorageSync('token', token);
};

// 清除用户登录状态
export const clearLoginStatus = () => {
  uni.removeStorageSync('userInfo');
  uni.removeStorageSync('token');
};

// 获取用户信息
export const getUserInfo = () => {
  return uni.getStorageSync('userInfo') || null;
};

// 跳转到登录页面
export const goToLogin = () => {
  uni.navigateTo({
    url: '/pages/login/index'
  });
};

// 使用微信小程序获取的手机号进行登录
export const loginWithPhone = async (phone) => {
  try {
    const res = await http.post('/api/wx/login', { phone })
    if (res.code === 200) {
      const { userInfo, token } = res.data
      // 保存登录状态
      setLoggedIn(userInfo, token)
      return userInfo
    }
    throw new Error(res.message || '登录失败')
  } catch (error) {
    throw new Error(error.message || '登录失败，请稍后再试')
  }
}

// 解密微信手机号
export const decryptWxPhone = async (encryptedData, iv, code) => {
  try {
    const res = await http.post('/api/wx/decrypt-phone', {
      encryptedData,
      iv,
      code
    })
    if (res.code === 200) {
      return res.data.phone
    }
    throw new Error(res.message || '解密失败')
  } catch (error) {
    throw new Error(error.message || '网络请求失败')
  }
}

// 获取微信用户信息
export const getWxUserInfo = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    uni.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        resolve(res.userInfo);
      },
      fail: (err) => {
        reject(err);
      }
    });
    // #endif

    // #ifndef MP-WEIXIN
    reject('非微信小程序环境');
    // #endif
  });
};

// 获取微信登录code
export const getWxLoginCode = () => {
  return new Promise((resolve, reject) => {
    uni.login({
      provider: 'weixin',
      success: (res) => {
        if (res.code) {
          resolve({ code: res.code });
        } else {
          reject(new Error('获取code失败'));
        }
      },
      fail: (err) => {
        console.error('wx.login失败:', err);
        reject(new Error('获取code失败: ' + err.errMsg));
      }
    });
  });
};
